package com.supermarket.mapper;

import com.supermarket.entity.Commodity;
import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface CommodityMapper {

    /**
     * 新增商品
     *
     * @param commodity 商品对象
     * @return 影响行数
     */
    int insert(Commodity commodity);

    /**
     * 更新商品
     *
     * @param commodity 商品对象
     * @return 影响行数
     */
    int update(Commodity commodity);

    /**
     * 根据ID查询商品
     *
     * @param id 商品ID
     * @return 商品对象
     */
    Commodity selectById(@Param("id") Integer id);

    /**
     * 条件查询商品
     *
     * @param name 商品名称
     * @param status 商品状态
     * @param categoryTag 分类标签
     * @return 商品列表
     */
    List<Commodity> selectByCondition(@Param("name") String name, @Param("status") String status, @Param("categoryTag") List<String> categoryTag);

    /**
     * 删除商品分类Tags
     *
     * @param id 商品ID
     * @return 影响行数
     */
    int updateCategoryTags(@Param("id") Integer id);
    
    /**
     * 插入商品分类Tags
     *
     * @param id 商品ID
     * @param categoryTag 分类标签列表
     * @return 影响行数
     */
    int insertCategoryTags(@Param("id") Integer id, @Param("categoryTag") List<String> categoryTag);

    /**
     * 删除商品图片
     *
     * @param id 商品ID
     * @return 影响行数
     */
    int updateImages(@Param("id") Integer id);
    
    /**
     * 插入商品图片
     *
     * @param id 商品ID
     * @param image 图片URL列表
     * @return 影响行数
     */
    int insertImages(@Param("id") Integer id, @Param("image") List<String> image);

    /**
     * 分页条件查询商品
     *
     * @param name 商品名称
     * @param status 商品状态
     * @param categoryTag 分类标签
     * @param sortField 排序字段
     * @param sortOrder 排序顺序
     * @return 商品列表
     */
    List<Commodity> selectByConditionWithPage(@Param("name") String name, @Param("status") String status, @Param("categoryTag") List<String> categoryTag, @Param("sortField") String sortField, @Param("sortOrder") String sortOrder);

    /**
     * 删除商品
     *
     * @param id 商品ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Integer id);
    
    /**
     * 查询商品总数
     * @return 商品总数
     */
    int countCommodities();
}